package lanou.a36ke_01.tools;

import android.graphics.Bitmap;
import android.widget.ImageView;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;

import lanou.a36ke_01.R;

//网络请求需要的工具类
public class NetTool {


    //在netToll初始化的时候 设置tag
    //方便在netTool在销毁的时候可以通过tag来取消网络请求
    //tag的作用就是 在退出应用程序的时候 结束所有的网络请求 要把它放在基类里面 然后可以取消所有的网络请求
    private Object tag;

    public NetTool(Object tag){
        this.tag = tag;
    }

    public NetTool() {
    }
    /**
     *url : 图片的url
     * imageView 图片需要设置给的imageView 用ImageLoader的方法获取网络图片 也可以用毕加索
     */
    public void getImage(String url , ImageView imageView){
        ImageLoader imageLoader = VolleySingleton.getInstance().getImageLoader();
        //第一张图片是 没有获取网络图片之前默认的图片 第二张图片是 网络图片请求失败的错误图片
        imageLoader.get(url,ImageLoader.getImageListener(imageView, R.mipmap.common_avatar,R.mipmap.defaultbg));
    }

    /**
     * 根据url获得网络数据
     * 注意:此方法只能解析JsonObject类型的数据 , 无法解析JsonArray类型的数据
     * @param url 网络请求用的url
     * @param tClass 要解析的实体类  类型
     * @param netListener 回调用的接口
     * @param <T> 要解析的实体类类型
     */

    public <T> void getNetData(String url , Class<T> tClass,final NetListener<T> netListener){
        GsonRequest<T> gsonRequest = new GsonRequest<T>(url, tClass, new Response.Listener<T>() {
            @Override
            public void onResponse(T response) {
                //将解析后的数据 返回给Activity , Fragment等调用的地方
                netListener.onSuccess(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //将错误的信息返回给用户
                netListener.onError(error.getMessage());

            }
        });
        //将Request加入到RequestQueue里
        VolleySingleton.getInstance().addRequest(gsonRequest,tag);

    }
    public void onDestory(){
        if (tag != null){
            VolleySingleton.getInstance().removeRequest(tag);
        }
    }
    public interface NetListener<T>{
        void onSuccess(T t);//请求成功
        void onError(String errorMsg);//请求失败,返回错误信息
    }
    public void getBitmap (String url , final GetBitmap getBitmap) {
        ImageLoader imageLoader = VolleySingleton.getInstance().getImageLoader();
        imageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }

            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                Bitmap bitmap = response.getBitmap();
                if (bitmap != null){
                    getBitmap.getBitmap(bitmap);
                }
            }
        });

    }
    public interface GetBitmap{
        void getBitmap(Bitmap bitmap);
    }
}
